AWS API Gateway
https://gyazo.com/4ede6ec2c6c021e13a1c9625ef2b341d
https://<api-id>.execute-api.<region-id>.amazonaws.com/<stage>/...と言ったエンドポイント
リージョナルリソース
swaggerからインポート可能
apiキャッシュでデータをキャッシュできる
クライアントsdkを生成できる→jsのsdkを生成してブラウザから認証付きリクエストできる
Lambda統合ではPOSTでlambdaを呼び出さないとエラーになる
30秒でタイムアウトする
時間のかかる処理は、レスポンスだけリターンして裏で実行し続けるしかない
https://gyazo.com/550cddb12b816adcdc7134f639f3a078
APIの認証認可
IAM認証
IAM権限がある場合のみ
Lambdaオーソライザ
Lambdaオーソライザーは、後続のAPIを実行するポリシードキュメントを返す仕組み
クライアントからはauthorizationヘッダーで値を送ってもらってlambdaでその値を許可するか決める
極論、lambdaにhogehoge許可の下手ガキしてクライアントからhogehogeで送るみたいな簡易的なapiの保護もできる
既に、認証の仕組みがある場合はlambdaオーソライザからそのロジックを呼び出す形で統合するのがベスト
リソースポリシー
aws内プライベートに閉じてる時はこれで制限しちゃう
apiキー
apiキーは計測のための識別目的であり認証に使わないこと!!
ユースケース
https://gyazo.com/e0422b4e02ce674aa6dfdac2433cf798
認証認可
https://gyazo.com/08ba2a4359c258a084b914a4e5ae50ee
https://gyazo.com/e3ca028cb2d242ff7dd28c6e2abf7a1b
https://gyazo.com/d2d19b39fe47e4600f136632a5aeba37
lambdaで自前の認証フローを定義
https://gyazo.com/8113caa0ed73cbd42c310c119c489bac
その他
https://gyazo.com/90a34167c3469d3a0ab4720f7e1e5ce2
https://gyazo.com/eb92ca73830de63231ccb2d35db32b41
https://gyazo.com/09437a08d099255c7e15d80136949a49
https://gyazo.com/bcd0455f70cf6b477fc88f7de7e8c695
参考資料
https://youtu.be/EpEETIox03s
lambda統合
https://gyazo.com/cf99d6653022fffd2ee60c9097b1ac69
hiroki.iconハマった😿
Getで配列パラメータを受け取りたい
multiValueQueryStringParametersで受け取れる
code:python
code:json
{'resource': '/sample', 'path': '/sample', 'httpMethod': 'GET', 'headers': None, 'multiValueHeaders': None, 'queryStringParameters': {'v': 'sjohe', 'url': 'hos'},
'multiValueQueryStringParameters':
{'v': 'hoge', 'hoge2', 'sjohe', 'url': 'hos'}, 'pathParameters': None, 'stageVariables': None, 'requestContext': {'resourceId': 'hqhnif', 'resourcePath': '/sample', 'httpMethod': 'GET', 'extendedRequestId': 'emD_IGiXNjMFj7Q=', 'requestTime': '30/Apr/2021:11:15:19 +0000', 'path': '/sample', 'accountId': '103933412310', 'protocol': 'HTTP/1.1', 'stage': 'test-invoke-stage', 'domainPrefix': 'testPrefix', 'requestTimeEpoch': 1619781319182, 'requestId': 'b950c877-54e8-42d3-9afb-25742ee9686e', 'identity': {'cognitoIdentityPoolId': None, 'cognitoIdentityId': None, 'apiKey': 'test-invoke-api-key', 'principalOrgId': None, 'cognitoAuthenticationType': None, 'userArn': 'arn:aws:sts::103933412310:assumed-role/LoginRoleAdmin/admin-assumer', 'apiKeyId': 'test-invoke-api-key-id', 'userAgent': 'aws-internal/3 aws-sdk-java/1.11.984 Linux/5.4.102-52.177.amzn2int.x86_64 OpenJDK_64-Bit_Server_VM/25.282-b08 java/1.8.0_282 vendor/Oracle_Corporation cfg/retry-mode/legacy', 'accountId': '103933412310', 'caller': 'AROARQMXKAPLHRV5RJ7YS:admin-assumer', 'sourceIp': 'test-invoke-source-ip', 'accessKey': 'ASIARQMXKAPLBOKCXUME', 'cognitoAuthenticationProvider': None, 'user': 'AROARQMXKAPLHRV5RJ7YS:admin-assumer'}, 'domainName': 'testPrefix.testDomainName', 'apiId': 'n4cv1vh722'}, 'body': None, 'isBase64Encoded': False}